#ifndef SINGLECLASS_H
#define SINGLECLASS_H

#include <memory>
#include <mutex>
template<typename T>
class SingleClass{

protected:
    SingleClass()=default;
    SingleClass(SingleClass<T> &s)=delete;
    SingleClass<T>& operator=(SingleClass<T>& s)=delete;

    static std::shared_ptr<T> _instance;
public:
    //这里返回引用可不会增加引用计数
    static std::shared_ptr<T> get_instance(){
        static std::once_flag _once_flag;
        std::call_once(_once_flag,[](){
            //_instance=std::make_shared<T>();    //这样是不行的，其他类内调用new T的构造函数无法访问
            _instance=std::shared_ptr<T>(new T);
        });
        return _instance;
    }




};


template<typename T>
std::shared_ptr<T> SingleClass<T>::_instance=nullptr;

#endif